package com.jiunuan.live.living.provider.service;

import com.jiunuan.live.common.interfaces.dto.PageWrapper;
import com.jiunuan.live.im.core.server.interfaces.dto.ImOfflineDTO;
import com.jiunuan.live.im.core.server.interfaces.dto.ImOnlineDTO;
import com.jiunuan.live.living.interfaces.dto.LivingRoomReqDTO;
import com.jiunuan.live.living.interfaces.dto.LivingRoomRespDTO;

import java.util.List;

/**
 * @Author: JiuNuan
 * @CreateTime: 2024-08-19 14:27
 * @Description:
 */

public interface ILivingRoomService {
    /**
     * 支持根据roomId查询出批量的userId（set）存储，3000个人，元素非常多，O(n)
     *
     * @param livingRoomReqDTO
     * @return
     */
    List<Long> queryUserIdByRoomId(LivingRoomReqDTO livingRoomReqDTO);

    /**
     * 用户上线处理
     * @param imOnlineDTO
     */
    void userOnlineHandler(ImOnlineDTO imOnlineDTO);

    /**
     * 用户下线处理
     * @param imOfflineDTO
     */
    void userOfflineHandler(ImOfflineDTO imOfflineDTO);
    /**
     * 根据直播间类型查询所有记录
     * @param type
     * @return
     */
    List<LivingRoomRespDTO> listAllLivingRoomFromDB(Integer type);
    /**
     * 直播间列表,分页查询
     * @param livingRoomReqDTO
     * @return
     */
    PageWrapper<LivingRoomRespDTO> list(LivingRoomReqDTO livingRoomReqDTO);
    /**
     * 根据用户id查询是否正在开播
     *
     * @param roomId
     * @return
     */
    LivingRoomRespDTO queryByRoomId(Integer roomId);
    /**
     * 开始直播
     * @param livingRoomReqDTO
     * @return 直播间id
     */
    Integer startLivingRoom(LivingRoomReqDTO livingRoomReqDTO);
}
